[
    {
        "description": "advanced schema from z-schema benchmark (https://github.com/zaggino/z-schema)",
        "schema": {
            "$schema": "http://json-schema.org/draft-07/schema#",
            "type": "object",
            "properties": {
                "/": { "$ref": "#/definitions/entry" }
            },
            "patternProperties": {
                "^(/[^/]+)+$": { "$ref": "#/definitions/entry" }
            },
            "additionalProperties": false,
            "required": [ "/" ],
            "definitions": {
                "entry": {
                    "$schema": "http://json-schema.org/draft-07/schema#",
                    "description": "schema for an fstab entry",
                    "type": "object",
                    "required": [ "storage" ],
                    "properties": {
                        "storage": {
                            "type": "object",
                            "oneOf": [
                                { "$ref": "#/definitions/entry/definitions/diskDevice" },
                                { "$ref": "#/definitions/entry/definitions/diskUUID" },
                                { "$ref": "#/definitions/entry/definitions/nfs" },
                                { "$ref": "#/definitions/entry/definitions/tmpfs" }
                            ]
                        },
                        "fstype": {
                            "enum": [ "ext3", "ext4", "btrfs" ]
                        },
                        "options": {
                            "type": "array",
                            "minItems": 1,
                            "items": { "type": "string" },
                            "uniqueItems": true
                        },
                        "readonly": { "type": "boolean" }
                    },
                    "definitions": {
                        "diskDevice": {
                            "properties": {
                                "type": { "enum": [ "disk" ] },
                                "device": {
                                    "type": "string",
                                    "pattern": "^/dev/[^/]+(/[^/]+)*$"
                                }
                            },
                            "required": [ "type", "device" ],
                            "additionalProperties": false
                        },
                        "diskUUID": {
                            "properties": {
                                "type": { "enum": [ "disk" ] },
                                "label": {
                                    "type": "string",
                                    "pattern": "^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$"
                                }
                            },
                            "required": [ "type", "label" ],
                            "additionalProperties": false
                        },
                        "nfs": {
                            "properties": {
                                "type": { "enum": [ "nfs" ] },
                                "remotePath": {
                                    "type": "string",
                                    "pattern": "^(/[^/]+)+$"
                                },
                                "server": {
                                    "type": "string",
                                    "anyOf": [
                                        { "format": "hostname" },
                                        { "format": "ipv4" },
                                        { "format": "ipv6" }
                                    ]
                                }
                            },
                            "required": [ "type", "server", "remotePath" ],
                            "additionalProperties": false
                        },
                        "tmpfs": {
                            "properties": {
                                "type": { "enum": [ "tmpfs" ] },
                                "sizeInMB": {
                                    "type": "integer",
                                    "minimum": 16,
                                    "maximum": 512
                                }
                            },
                            "required": [ "type", "sizeInMB" ],
                            "additionalProperties": false
                        }
                    }
                }
            }
        },
        "tests": [
            {
                "description": "valid object from z-schema benchmark",
                "data": {
                    "/": {
                        "storage": {
                            "type": "disk",
                            "device": "/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    },
                    "/var": {
                        "storage": {
                            "type": "disk",
                            "label": "8f3ba6f4-5c70-46ec-83af-0d5434953e5f"
                        },
                        "fstype": "ext4",
                        "options": [ "nosuid" ]
                    },
                    "/tmp": {
                        "storage": {
                            "type": "tmpfs",
                            "sizeInMB": 64
                        }
                    },
                    "/var/www": {
                        "storage": {
                            "type": "nfs",
                            "server": "my.nfs.server",
                            "remotePath": "/exports/mypath"
                        }
                    }
                },
                "valid": true
            },
            {
                "description": "not object",
                "data": 1,
                "valid": false
            },
            {
                "description": "root only is valid",
                "data": {
                    "/": {
                        "storage": {
                            "type": "disk",
                            "device": "/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    }
                },
                "valid": true
            },
            {
                "description": "missing root entry",
                "data": {
                    "no root/": {
                        "storage": {
                            "type": "disk",
                            "device": "/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    }
                },
                "valid": false
            },
            {
                "description": "invalid entry key",
                "data": {
                    "/": {
                        "storage": {
                            "type": "disk",
                            "device": "/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    },
                    "invalid/var": {
                        "storage": {
                            "type": "disk",
                            "label": "8f3ba6f4-5c70-46ec-83af-0d5434953e5f"
                        },
                        "fstype": "ext4",
                        "options": [ "nosuid" ]
                    }
                },
                "valid": false
            },
            {
                "description": "missing storage in entry",
                "data": {
                    "/": {
                        "fstype": "btrfs",
                        "readonly": true
                    }
                },
                "valid": false
            },
            {
                "description": "missing storage type",
                "data": {
                    "/": {
                        "storage": {
                            "device": "/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    }
                },
                "valid": false
            },
            {
                "description": "storage type should be a string",
                "data": {
                    "/": {
                        "storage": {
                            "type": null,
                            "device": "/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    }
                },
                "valid": false
            },
            {
                "description": "storage device should match pattern",
                "data": {
                    "/": {
                        "storage": {
                            "type": null,
                            "device": "invalid/dev/sda1"
                        },
                        "fstype": "btrfs",
                        "readonly": true
                    }
                },
                "valid": false
            }
        ]
    }
]
